package br.com.raulfortes.guardasenha;

import java.io.File;
import java.util.List;

import br.com.raulfortes.guardasenha.beans.Arquivo;
import br.com.raulfortes.guardasenha.beans.Grupo;
import br.com.raulfortes.guardasenha.beans.Registro;
import br.com.raulfortes.guardasenha.dao.ArquivoDAO;
import br.com.raulfortes.guardasenha.iu.TelaPrincipal;


public class GuardaSenha {

	private ArquivoDAO arquivoDAO;
	private Arquivo arquivo;
	private File file;
	private String senha;
	
	private Registro registroSelecionado;
	
	private boolean precisaSalvar = false;
	
    private static void createAndShowGUI() {
		GuardaSenha guardaSenha = new GuardaSenha();
		TelaPrincipal tela = new TelaPrincipal();
		tela.setGuardaSenha(guardaSenha);
		tela.show();
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
	
	GuardaSenha(){
		arquivoDAO = new ArquivoDAO();
	}
	
	public boolean getPrecisaSalvar(){
		if (arquivo != null) {
			return precisaSalvar;
		}
		return false;
	}
	
	public void novoArquivo(String nome){
		precisaSalvar = true;
		arquivo = new Arquivo();
		arquivo.init();
		arquivo.setNome(nome);
	}
	
	public boolean carregaArquivo(File file, String senha){
		this.file = file;
		this.senha = senha;
		try {
			arquivo = arquivoDAO.load(file, senha);
		} catch (Exception e) {
			System.out.println("Erro ao carregar arquivo !");
			e.printStackTrace();
			return false;
		}
		return true;
	}

	public boolean salvarArquivo(){
		try {
			arquivoDAO.save(file, arquivo, senha);
			precisaSalvar = false;
		} catch (Exception e1) {
			System.out.println("Erro ao salvar arquivo !");
			e1.printStackTrace();
			return false;
		}
		return true;
	}

	public boolean salvarArquivoComo(File file,String senha){
		this.file = file;
		this.senha = senha;
		try {
			arquivoDAO.save(file, arquivo, senha);
			precisaSalvar = false;
		} catch (Exception e1) {
			System.out.println("Erro ao salvar arquivo como!");
			e1.printStackTrace();
			return false;
		}
		return true;
	}

	public boolean fecharArquivo(){
		arquivo = null;
		file = null;
		senha = null;
		precisaSalvar = false;
		registroSelecionado = null;
		
		return true;
	}
	
	public void SairDoSistema(){
		System.exit(0);
	}
	
	public File getFile() {
		return file;
	}

	
	public void setFile(File file) {
		this.file = file;
	}

	
	public String getSenha() {
		return senha;
	}

	
	public void setSenha(String senha) {
		precisaSalvar = true;
		this.senha = senha;
	}	
	
	public Registro addRegistro(String nome){
		precisaSalvar = true;		
		Registro registro = new Registro(nome,"","");
		arquivo.addRegistro(registro);
		return registro;
	}
	public Grupo addGrupo(String nome){
		precisaSalvar = true;				
		Grupo grupo = new Grupo(nome);
		arquivo.addGrupo(grupo);
		return grupo;
	}
	
	public void removeRegistro(String nome){
		precisaSalvar = true;				
		Registro registro = new Registro(nome,"","");
		removeRegistro(registro);
	}
	public void removeGrupo(String nome){
		precisaSalvar = true;				
		Grupo grupo = new Grupo(nome);
		removeGrupo(grupo);
	}	
	public void removeRegistro(Registro registro){
		precisaSalvar = true;				
		arquivo.removeRegistro(registro);
	}
	public void removeGrupo(Grupo grupo){
		precisaSalvar = true;		
		arquivo.removeGrupo(grupo);
	}
	
	public List getListaDeRegistros(){
		return arquivo.getListaDeRegistros();
	}
	public String getNomeArquivo(){
		return arquivo.getNome();
	}
	public void setNomeArquivo(String nome){
		precisaSalvar = true;				
		arquivo.setNome(nome);
	}

	public void setRegistroSelecionadoNome(String nome) {
		precisaSalvar = true;						
		registroSelecionado.setNome(nome);
	}	
	public void setRegistroSelecionadoUsuario(String usuario) {
		precisaSalvar = true;						
		registroSelecionado.setUsuario(usuario);
	}
	public void setRegistroSelecionadoSenha(String senha) {
		precisaSalvar = true;						
		registroSelecionado.setSenha(senha);
	}
	public void setRegistroSelecionadoDetalhes(String detalhes) {
		precisaSalvar = true;		
		registroSelecionado.setDetalhes(detalhes);
	}
		
	public Registro getRegistroSelecionado(){
		return registroSelecionado;
	}
	public void setRegistroSelecionado(Registro registro){
		registroSelecionado = registro;
	}	
}
